﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using ThanNhanTao.Server;
using DevExpress.Xpf.Core;
using System.ComponentModel;
using DevExpress.Xpf.Grid;
using ThanNhanTao.Server.BLL;
using DevExpress.XtraEditors.DXErrorProvider;
using ThanNhanTao.Report;
using ThanNhanTao.Server.Entities;
using System.Data;
using ThanNhanTao.ListTemp;
using ThanNhanTao.Server.Enum;
using System.Windows.Markup;

namespace ThanNhanTao
{
    /// <summary>
    /// Interaction logic for frmDmChanDoan.xaml
    /// </summary>
    public partial class frmDmChanDoan : DXWindow
    {
        #region

        private const string THONG_TIN_KHONG_DUOC_DE_TRONG = "Thông tin không được để trống";
        private const string MA_KHONG_DUOC_TRUNG = "Mã chẩn đoán không được trùng";

        #endregion

        #region Fields

        Dm_ChanDoanBLL dmChanDoanBll = new Dm_ChanDoanBLL();
        List<Dm_ChanDoan> listChanDoan;
        bool flagThemMoi;
        string validationError;

        #endregion

        public frmDmChanDoan()
        {
            InitializeComponent();
            listChanDoan = new List<Dm_ChanDoan>();
            try
            {
                flagThemMoi = true;
                BindGrid();
                SetEnableButton(false, false, false, listChanDoan.Count > 0);
            }
            catch (Exception)
            {
                DXMessageBox.Show("thiết lập thông tin không thành công", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }

        public void BindGrid()
        {
            listChanDoan.Clear();
            listChanDoan = dmChanDoanBll.RetrieveAll();
            grid.ItemsSource = listChanDoan;
        }

        #region Events

        private void btnThemMoi_Click(object sender, RoutedEventArgs e)
        {
            ThemMoi();
        }

        private void btnLuu_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                btnLuu.Focus();
                validationError = string.Empty;
                txtMa.CausesValidation = true;
                txtMa.DoValidate();
                if (txtMa.HasValidationError)
                {
                    DXMessageBox.Show(validationError, "Thông báo", MessageBoxButton.OK, MessageBoxImage.Warning);
                    return;
                }
                txtTen.CausesValidation = true;
                txtTen.DoValidate();
                if (txtTen.HasValidationError)
                {
                    DXMessageBox.Show(validationError, "Thông báo", MessageBoxButton.OK, MessageBoxImage.Warning);
                    return;
                }
                dmChanDoanBll.Save(txtMa.Text, txtTen.Text, txtGhiChu.Text, ckbKichHoat.IsChecked == true ? true : false, flagThemMoi);
                DXMessageBox.Show("Lưu thông tin thành công", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Information);
                BindGrid();
                ThemMoi();
            }
            catch (Exception)
            {
                DXMessageBox.Show("Lưu thông tin không thành công","Thông báo",MessageBoxButton.OK,MessageBoxImage.Error);
            }
            
        }

        private void btnDong_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        private void btnXoa_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                Dm_ChanDoan item = grid.GetFocusedRow() as Dm_ChanDoan;
                if (item != null && tbv.FocusedRowHandle != GridControl.NewItemRowHandle)
                {
                    if (dmChanDoanBll.WasUsed(item.MaChanDoan))
                    {
                        DXMessageBox.Show("Không thể xóa thông tin đã được sử dụng", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Warning);
                        return;
                    }
                    if (DXMessageBox.Show("Bạn có chắc chắn xóa thông tin này không?", "Thông báo", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.Yes) == MessageBoxResult.Yes)
                    {
                        dmChanDoanBll.Xoa(item.MaChanDoan);
                        listChanDoan.Remove(item);
                        grid.ItemsSource = listChanDoan;
                        grid.RefreshData();
                    }
                }
            }
            catch (Exception)
            {
                DXMessageBox.Show("Xóa thông tin không thành công", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }

        private void btnHuyBo_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                ThemMoi();
                //BindGrid();
            }
            catch (Exception)
            {
                DXMessageBox.Show("Hủy bỏ thông tin không thành công", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Error);
            }
            
        }

        private void tbv_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            Dm_ChanDoan item = grid.GetFocusedRow() as Dm_ChanDoan;
            if (item != null && tbv.GetRowHandleByMouseEventArgs(e) != GridControl.InvalidRowHandle)
            {
                txtMa.IsEnabled = false;
                txtMa.Text = item.MaChanDoan;
                txtTen.Text = item.TenChanDoan;
                txtGhiChu.Text = item.GhiChu;
                ckbKichHoat.IsChecked = item.KichHoat;
                SetEnableButton(true, false, true, listChanDoan.Count > 0);
                flagThemMoi = false;
            }
        }

        #endregion

        #region Method

        public void SetEnableButton(bool buttonthemMoi,bool buttonLuu, bool buttonHuyBo, bool buttonXoa)
        {
            btnThemMoi.IsEnabled = buttonthemMoi;
            btnLuu.IsEnabled = buttonLuu;
            btnHuyBo.IsEnabled = buttonHuyBo;
            btnXoa.IsEnabled = buttonXoa;
        }

        public void ThemMoi()
        {
            flagThemMoi = true;
            txtMa.CausesValidation = false;
            txtTen.CausesValidation = false;
            txtMa.IsEnabled = true;
            txtMa.Text = string.Empty;
            txtTen.Text = string.Empty;
            txtGhiChu.Text = string.Empty;
            ckbKichHoat.IsChecked = true;
            SetEnableButton(false, false, true, listChanDoan.Count > 0);
            tbv.FocusedRow = null;
        }

        #endregion

        private void txtMa_KeyDown(object sender, KeyEventArgs e)
        {
            SetEnableButton(btnThemMoi.IsEnabled, true, true, listChanDoan.Count > 0);
        }

        private void txtTen_KeyDown(object sender, KeyEventArgs e)
        {
            SetEnableButton(btnThemMoi.IsEnabled, true, true, listChanDoan.Count > 0);
        }

        private void txtGhiChu_KeyDown(object sender, KeyEventArgs e)
        {
            SetEnableButton(btnThemMoi.IsEnabled, true, true, listChanDoan.Count > 0);
        }

        private void ckbKichHoat_Unchecked(object sender, RoutedEventArgs e)
        {
            SetEnableButton(btnThemMoi.IsEnabled, true, true, listChanDoan.Count > 0);
        }

        private void txtMa_Validate(object sender, DevExpress.Xpf.Editors.ValidationEventArgs e)
        {
            if (string.IsNullOrWhiteSpace(e.Value as string))
            {
                validationError = THONG_TIN_KHONG_DUOC_DE_TRONG;
                e.SetError(THONG_TIN_KHONG_DUOC_DE_TRONG, ErrorType.Critical);
                e.IsValid = false;
                return;
            }
            if (flagThemMoi)
            {
                if (dmChanDoanBll.IsDuplicate(e.Value as string))
                {
                    validationError = MA_KHONG_DUOC_TRUNG;
                    e.SetError(MA_KHONG_DUOC_TRUNG, ErrorType.Critical);
                    e.IsValid = false;
                    return;
                }
            }
        }

        private void txtTen_Validate(object sender, DevExpress.Xpf.Editors.ValidationEventArgs e)
        {
            if (string.IsNullOrWhiteSpace(e.Value as string))
            {
                validationError = THONG_TIN_KHONG_DUOC_DE_TRONG;
                e.SetError(THONG_TIN_KHONG_DUOC_DE_TRONG, ErrorType.Critical);
                e.IsValid = false;
                return;
            }
            else
                e.IsValid = true;
        }

        private void txtMa_KeyUp(object sender, KeyEventArgs e)
        {
            SetEnableButton(btnThemMoi.IsEnabled, true, true, listChanDoan.Count > 0);
        }

        private void txtTen_KeyUp(object sender, KeyEventArgs e)
        {
            SetEnableButton(btnThemMoi.IsEnabled, true, true, listChanDoan.Count > 0);
        }

        private void txtGhiChu_KeyUp(object sender, KeyEventArgs e)
        {
            SetEnableButton(btnThemMoi.IsEnabled, true, true, listChanDoan.Count > 0);
        }

        private void ckbKichHoat_Checked(object sender, RoutedEventArgs e)
        {
            SetEnableButton(btnThemMoi.IsEnabled, true, true, listChanDoan.Count > 0);
        }
    }
}
